Linux 添加文本到指定行/在文件的指定行添加内容(shell, sed)

您所在的位置:网站首页 shell 定位字符位置 Linux 添加文本到指定行/在文件的指定行添加内容(shell, sed)

Linux 添加文本到指定行/在文件的指定行添加内容(shell, sed)

2023-11-12 18:54| 来源: 网络整理| 查看: 265

话题相关 #Linux如何添加文本到指定行 #shell如何添加文本到指定行 #sed 插入文本

用sed来插入文本到指定行。

基本语法 只是在屏幕输出/打印中显示更改,并不改变文件本身内容 sed '作用范围行 插入行前/行后 插入内容' 文件名 # 中间的空格也可省略 sed '作用范围行插入行前/行后插入内容' 文件名 # 常常在插入内容前留空格 sed '作用范围行插入行前/行后 插入内容' 文件名 添加文本常常需要的是添加内容到文件里,更新文件,要在sed后面加 -i,是编辑文档“edit files in place”选项。 sed -i '作用范围行 插入行前/行后 插入内容' 文件名 插入行前/行后 # sample.txt文件第1行前面添加“hello”;实质就是插入内容到文件第1行 sed -i '1 i hello' sample.txt # sample.txt文件第1行后面添加“hello”;实质就是插入内容到文件第2行 sed -i '1 a hello' sample.txt

行前用 i ,行后用a。 i比a常用。 当然要插入内容到最后一行就得用a了。同样要插入内容到文件第一行需要用i。

所以这个插入操作要注意行号的变化。下面的内容多次添加文本时注意具体写了注意的内容。

作用范围行

注意如果是刚建好的空文件是写不进内容的,因为空文件没有行号。 (sed是不能处理空文件的,可参考这篇文章。 链接:sed不能处理空文件)

最后一行用$表示。

插入内容到某行,直接写指定行号。

把内容插入到某行应该是最常用的。 也是本文题目所指。

# 把"hello"插入到第2行 sed -i '2i hello' sample.txt # 把"hello"插入到最后一行 sed -i '$a hello' sample.txt 行号位置为空,即不写行号,就是作用范围在全文每一行 sed -i 'i hello' sample.txt

效果是这样的,

$ cat test.txt a b c d # 不写行号,作用在每一行 $ sed 'i hello' test.txt hello a hello b hello c hello d

注意这一点这vim中的作用范围不太一样,vim中不写作用范围的话是作用于光标所在的当前行,而sed是指全文范围。

指定某行到某行,用逗号连接行号 $ sed '2,4 i hello' test.txt

效果是这样的,

$ cat test.txt a b c d # 作用在原本的第2行到第4行 $ sed '2,4 i hello' test.txt a hello b hello c hello d 多次添加文本时注意

本文讲的插入方法,就像上面讲的,插入的是指定行的行前/行后,也就是是相对位置。 比如,

# 把"hello"插入到第2行 sed -i '2i hello' sample.txt

这个例子里的插入到第2行,实际上插入到原来的第2行前面取代了第2行,之前的第2行在插入内容后就变成了第3行。

如果多次插入内容,要注意行号是随着内容的更新而更新的。

比如这个失败的例子,想要把hello1写到第1行,hello2写到第2行。

# 失败的例子 # 文件原本的内容 $ cat test.txt happy,happy,c a,cat,c $ sed -i '2i hello2' test.txt # 此时的确将hello2 插入到了第二行 $ cat test.txt happy,happy,c hello2 a,cat,c $ sed -i '1i hello1' test.txt # 这时虽然将hello1插入第2行,但是hello2就不再是在第2行,而跑去了第3行 $ cat test.txt hello1 happy,happy,c hello2 a,cat,c

按行号顺序插入是一个解决方法。

如果是要求将内容绝对地插入指定行,应该考虑文本替换。

# 文本替换是绝对的指定行 # 例,设定第3行内容为hello3 sed '3s/.*/hello3/' test.txt

文本替换相关的内容可以参考这篇文章 sed 文本替换 。

(以上。)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3